package com.jl.mapper;


import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.jl.commons.excel.DeviceExcel;
import com.jl.model.Device;
import com.jl.model.in.DeviceIn;
import com.jl.model.in.ProductionLineDevice;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * <p>
 * 设备表 Mapper 接口
 * </p>
 *
 * @author JiangJian
 * @since 2019-03-06
 */
public interface DeviceMapper extends BaseMapper<Device> {

    /**
     * 查询设备信息列表
     * 这里的Param中必须使用 ew为名称 这是因为使用了mybatisplus中的内定的参数
     * 且在xml中必须是使用 美元符 $ 来作为占位符
     * @param page
     * @param qw
     * @return
     */
    List<Map<String,Object>> selectDataGrid(Page<Map<String,Object>> page, @Param("ew") QueryWrapper<Device> qw);

    /**
     * 获取所有某类型的设备
     * @param modelId 设备类型id
     * @return
     */
    List<Device> selectDeviceWithModelId(@Param("modelId")Long modelId);

    /**
     * 获取某条生产线的所有设备基本信息
     * @param productionLine 生产线id
     * @return 设备id集合
     */
    List<ProductionLineDevice> selectLineDeviceByProductionLine(@Param("productionLine") Long productionLine);

    /**
     * 导出设备的excel
     * @param ids
     * @return
     */
    List<DeviceExcel> selectDeviceExcelByIds(@Param("ids")List<Long>ids);

    /**
     * 查询设备编号的个数
     * @param number 设备编号
     * @return 结果数量
     */
    Integer selectDeviceNumberCount(@Param("number") String number);

    /**
     * device的部分属性
     * @param number
     * @return
     */
    DeviceIn selectDeviceInByNumber(@Param("number") String number);

    /**
     *
     * @param deviceId
     * @return
     */
    DeviceIn selectDeviceInById(@Param("deviceId") Long deviceId);

    /**
     * 更新设备的故障总时长和故障次数
     * @param failCount 故障次数
     * @param failTime 故障总时长
     * @param deviceId 故障id
     * @return
     */
    Integer updateDeviceFaultCountAndTime(@Param("failCount")Integer failCount,@Param("failTime")Integer failTime,@Param("deviceId")Long deviceId);

    /**
     * 获取某月重复发生故障的设备信息
     * @param startTime 月份  例如：201905
     * @param endTime 月份  例如：201905
     * @return
     */
    List<Map<String,Object>> selectRepeatDamageDeviceInMonth(Page<Map<String,Object>> page,@Param("startTime") String startTime,@Param("endTime") String endTime);



    /********************************统计代码**************************************/

    /**
     * 获取所有的故障时间最多的设备信息
     * @param type 按周还是按月 1 周 2月
     * @param startTime 起始时间
     * @param endTime  结束时间
     * @return 故障设备信息
     */
    List<Map<String,Object>> selectTopFaultTimeDevice(@Param("type") Integer type,@Param("startTime") String startTime,@Param("endTime") String endTime);


    /**
     * 获得故障次数最多的设备
     * @param type 按周还是按月 1 周 2月
     * @param startTime 起始时间
     * @param endTime  结束时间
     * @return 故障设备信息
     */
    List<Map<String,Object>> selectTopFaultCountDevice(@Param("type") Integer type,@Param("startTime") String startTime,@Param("endTime") String endTime);

    /**
     * 获取故障时间超过两小时次数最多的设备信息
     * @param type 按周还是按月 1 周 2月
     * @param startTime 起始时间
     * @param endTime 结束时间
     * @return 故障设备信息
     */
    List<Map<String,Object>> selectTopOverHourCountDevice(@Param("type") Integer type,@Param("startTime") String startTime,@Param("endTime") String endTime);

}
